/*
 * default_devInfo_provider.h
 *
 *  Created on: 2021年10月21日
 *      Author: guyadong
 */

#ifndef DTALK_DEFAULT_DEVINFO_PROVIDER_H_
#define DTALK_DEFAULT_DEVINFO_PROVIDER_H_
#include "dtalk_item.h"
#include <if_utilits.h>
#include <common_utilits.h>
namespace dtalk{
	/** 基于网卡设备的DeviceInfoProvider 默认实现 */
	struct DefaultDevInfoProvider : public virtual DeviceInfoProvider
	{
	private:
		/** MAC地址(6字节二进制数据) */
		std::string mac;
		/** IP地址(4字节二进制数据) */
		std::string ip;
		/** 16进制格式的MAC地址字符串 */
		std::string macstr;
		/** '.'号分隔十进制格式的IP地址字符串 */
		std::string ipstr;
	public:
		DefaultDevInfoProvider(): mac({ 0,0,0,0,0,0 }), ip({ 127,0,0,1 }),macstr("000000000000"),ipstr("127.0.0.1") {
			/** 获取默认的第一张网卡设备的MAC/IP */
			if (ifu::get_mac_address("", macstr, false))
			{
				mac = gdface::parse_mac(macstr);
			}
			if (ifu::get_ip_address("", ipstr, false))
			{
				ip = gdface::parse_ip(ipstr);
			}
		}
		virtual ~DefaultDevInfoProvider() = default;
		virtual std::string getPassword() override
		{
			/** 返回mac地址后4位做默认密码 */ 
			return macstr.substr(8);
		}
		virtual std::string getMac() override 
		{
			return mac;
		}
		virtual std::string getMacAsString () override
		{
			return macstr;
		}
		virtual std::string getIp() override
		{
			return ip;
		}
		virtual std::string getIpAsString() override
		{
			return ipstr;
		}
	};

} /** namespace dtalk */
#endif /* DTALK_DEFAULT_DEVINFO_PROVIDER_H_ */
